/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Dao.FornecedorDao;
import Dao.FornecedorDaoImp;
import Model.FornecedorModel;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author THIAGO
 */
public class Fornecedor extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    /* Variaveis
     */
    private String erro = "";
    FornecedorModel fornecedor = new FornecedorModel();
    FornecedorModel fornecedor1 = new FornecedorModel();
    private FornecedorDao dao = new FornecedorDaoImp();

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /**
             * Busca os dados do formulario
             */
            List<FornecedorModel> listaFornecedor = new ArrayList<FornecedorModel>();
            String acao = request.getParameter("acao");
            if ("novo".equals(acao)) {
                String teste = request.getParameter("idForn");
                if (!"0".equals(teste)) {
                    acao = "altera";
                }
                Save(request, response, acao);
            } else if ("editar".equals(acao)) {
                fornecedor = dao.getFornecedor(Integer.parseInt(request.getParameter("id")));
                request.setAttribute("FornecedorModel", fornecedor);
            } else if ("excluir".equals(acao)) {
                String teste = request.getParameter("id");
                fornecedor = dao.getFornecedor(Integer.parseInt(teste));
                dao.remove(fornecedor);
            }
            //Busca os dados do banco
            HttpSession sessao = request.getSession();
            listaFornecedor = dao.getTodos();
            sessao.setAttribute("ListaFornecedores", listaFornecedor);
            RequestDispatcher dispatcher = request.getRequestDispatcher("Fornecedor.jsp");
            dispatcher.forward(request, response);
            
        } catch (Exception ex) {
            ex.getMessage();
            RequestDispatcher dispatcher = request.getRequestDispatcher("Fornecedor.jsp");
            dispatcher.forward(request, response);
        } finally {
            out.close();
        }
    }



    private void Save(HttpServletRequest request, HttpServletResponse response, String acao) throws Exception {
        String nomeFornecedor = request.getParameter("nomeF");
        String razaoSocial = request.getParameter("razC");
        String cnpj = request.getParameter("cnpJ");
        String cep = request.getParameter("cep");
        String endereco = request.getParameter("endE");
        String numero = request.getParameter("numE");
        String complemento = request.getParameter("comP");
        String bairro = request.getParameter("baiR");
        String cidade = request.getParameter("cidA");
        String uf = request.getParameter("uf");
        String telefone = request.getParameter("tel");
        String inscricaoEstadual = request.getParameter("insC");
        String email = request.getParameter("emaI");
        String fax = request.getParameter("fax");
        String homePage = request.getParameter("homE");
        String observacao = request.getParameter("obs");
        String status = request.getParameter("status");

        /* Validacao dos campos obrigatorios
         */
        if ("".equals(nomeFornecedor)) {
            erro = erro + "Nome do fornecedor não foi preenchido <br />";
        }
        if ("".equals(razaoSocial)) {
            erro = erro + "Razão social não foi preenchido <br />";
        }
        if ("".equals(cnpj)) {
            erro = erro + "Cnpj não foi preenchido <br />";
        }
        if ("".equals(cep)) {
            erro = erro + "Cep não foi preenchido <br />";
        }
        if ("".equals(endereco)) {
            erro = erro + "Endereco não foi preenchido <br />";
        }
        if ("".equals(numero)) {
            erro = erro + "Numero não foi preenchido <br />";
        }
        if ("".equals(bairro)) {
            erro = erro + "Bairro não foi preenchido <br />";
        }
        if ("".equals(cidade)) {
            erro = erro + "Cidade não foi preenchido <br />";
        }
        if ("".equals(uf)) {
            erro = erro + "Estado não foi preenchido <br />";
        }
        if ("".equals(telefone)) {
            erro = erro + "Telefone não foi preenchido <br />";
        }
        if ("".equals(inscricaoEstadual)) {
            erro = erro + "Inscrição estadual não foi preenchido <br />";
        }
        if ("".equals(status)) {
            erro = erro + "É obrigatório informar um status <br />";
        }
        if (!"".equals(erro)) {
            throw new Exception("Dados invalidos");
        }
        /* Instanciando objeto
         */
        fornecedor.setNomefornecedor(nomeFornecedor);
        fornecedor.setRazaosocial(razaoSocial);
        fornecedor.setCnpj(cnpj);
        fornecedor.setCep(cep);
        fornecedor.setEndereco(endereco);
        fornecedor.setNumero(numero);
        fornecedor.setComplemento(complemento);
        fornecedor.setBairro(bairro);
        fornecedor.setCidade(cidade);
        fornecedor.setUf(uf);
        fornecedor.setTelefone(telefone);
        fornecedor.setInscricaoestadual(inscricaoEstadual);
        fornecedor.setEmail(email);
        fornecedor.setFax(fax);
        fornecedor.setHomePage(homePage);
        fornecedor.setObservacao(observacao);
        fornecedor.setIdstatus(Integer.parseInt(status));
        /* Insercao dos dados
         */
        if ("novo".equals(acao)) {
            dao.save(fornecedor);
            // MensagemSucesso(null, nomeFornecedor);
            //RequestDispatcher rd = getServletContext().getRequestDispatcher("/Fornecedor.jsp");
            //rd.include(request, response);

        } else if ("altera".equals(acao)) {
            dao.update(fornecedor);
        } else {
            throw new Exception("Procedimento invalido");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(Fornecedor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(Fornecedor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
